using UnityEngine;
using System.Collections;

public class CharBehaviour : MonoBehaviour 
{
	Transform ladderTransform;
    public int isTriggered;
	public bool onLadder;		    // Détermine si le joueur est en contact avec une échelle
	public bool climbLadder;	    // Détermine si le joueur est en train de grimper une échelle
	public Vector3 ladderPosition;	    // Enregistre la position du joueur sur l'échelle en y si il décide de grimper
	
	Animation idle;

    public int score;
	
    public float velocity;
    public float airVelocity;   // Acceleration lorsque le personnage se trouve en l'air
    public float maxMagnitude;  // Vitesse maximale que peut atteindre le personnage
    public int collide;
    public float magnitudeJump;
	

	// Use this for initialization
	
	void Start ()
    {
		//ladderTransform = new Transform();
        isTriggered = 0;
        score = 0;
        ladderPosition = new Vector3();
		onLadder=false;
		climbLadder=false;
		
		idle=new Animation();
		idle.LoadSpriteSheet("testAnim", 2, 60);
		this.renderer.material.mainTexture=idle.spriteSheet;
			
        velocity = 40.0f;
        airVelocity = 3.0f;
        maxMagnitude = 6.0f;
        magnitudeJump = 15.0f;
        collide = 0;
		
		Debug.Log(idle.spriteSheet);
		gameObject.renderer.material.mainTexture =idle.spriteSheet	;

	}
	
	// Update is called once per frame
	void Update () 
	{

		idle.Update(this.gameObject.renderer);
		
		if(Input.GetKey(KeyCode.Z) && onLadder)
		{
            if (!climbLadder)
            {
                transform.rigidbody.velocity = new Vector3(0.0f, 0.0f, 0.0f);
                ladderPosition =  transform.position;
            }
            collider.isTrigger = true;
			climbLadder=true;

            ladderPosition.y += 0.1f;
		}
        if (Input.GetKey(KeyCode.S) && onLadder)
        {
            if (climbLadder)
            {
				Debug.Log(this.transform.position.y +" "+ladderTransform.position.y);
				Debug.Log(this.transform.localScale.y +" "+ladderTransform.localScale.y);
				
     			if(this.transform.position.y-(this.transform.localScale.y/2.0)> ((ladderTransform.position.y-(ladderTransform.localScale.y/2.0))+0.1))
				{
                	ladderPosition.y -=0.1f;
				}
            }
            else
            {
                collider.isTrigger = true;
                climbLadder = true;
                transform.rigidbody.velocity = new Vector3(0.0f, 0.0f, 0.0f);
                ladderPosition = transform.position;
              
            }
        }
		
		
       if(Input.GetKey(KeyCode.D))
       {
           if (climbLadder)
           {
             
           }
           else if (collide != 0)
           {
               transform.rigidbody.AddRelativeForce(new Vector3(velocity, 0.0f, 0.0f));
           }
           else
           {
               transform.rigidbody.AddRelativeForce(new Vector3(airVelocity, 0.0f, 0.0f));
           }
           
       }
       else if (Input.GetKey(KeyCode.Q))
       {
           if (climbLadder)
           {
             
           }
           else if (collide != 0)
           {
               transform.rigidbody.AddRelativeForce(new Vector3(-velocity, 0.0f, 0.0f));
           }
           else
           {
               transform.rigidbody.AddRelativeForce(new Vector3(-airVelocity, 0.0f, 0.0f));
           }
           
       }
		
       
       if (Input.GetKey(KeyCode.Space))
       {
			
			if(climbLadder)
			{
				transform.rigidbody.velocity = new Vector3(transform.rigidbody.velocity.x, magnitudeJump, 0.0f);
				if(isTriggered==1)
				{
					this.collider.isTrigger=false;
				}
	           climbLadder = false;
	          
			}
			else
			{
				if(collide!=0)
				{
				 	transform.rigidbody.velocity = new Vector3(transform.rigidbody.velocity.x, magnitudeJump, 0.0f);	
				}
			
			}
       }
       else
       {
           if (transform.rigidbody.velocity.magnitude > maxMagnitude && collide != 0)
           {
               transform.rigidbody.velocity = transform.rigidbody.velocity.normalized * maxMagnitude;
           }
       }

        if(climbLadder)
        {
            transform.position = ladderPosition;
            transform.rigidbody.velocity = new Vector3();
	    }
	}

    void OnGUI()
    {
      //  GUI.Label(new Rect(0, 300, 100, 350), "LOL");
    }

    void OnCollisionEnter(Collision collision)
    {
        collide++;
    }

    void OnCollisionExit(Collision collision)
    {
        collide--;
    }
	
	void OnTriggerEnter(Collider collider)
	{
        isTriggered++;
		
		if(collider.tag=="Ladder")
		{
			onLadder=true;
			ladderTransform=collider.transform;
		}
		else if(collider.tag=="KillZone")
		{
			Application.LoadLevel(0);       //  Le joueur perd et je recharge le niveau
		}
	}
	
	void OnTriggerExit(Collider collider)
	{
        isTriggered--;
		if(collider.tag=="Ladder")
		{
			if(isTriggered==0)
			{
				onLadder=false;
				climbLadder=false;
	            this.collider.isTrigger = false;
			}
		}
		else 	// Si le personnage sort d'un élément alors qu'il est "intangible"
		{
			if(this.collider.isTrigger==true)
			{
				if(isTriggered<2)	// Si il n'y a plus qu'un élément en contact avec le personnage, et que celui
									// qu'on quitte n'est pas l'échelle
				{
					this.collider.isTrigger=false;	// Alors le personnqage redevient tangible
				}
			}
		}

	}
}
